﻿///////////////////////////////////////////////////////////////////////////////
// 文件名： D3D9RenderWindow.hpp
// 作者：   671643387@qq.com
// 日期：   2015年11月2日 下午4:16:21
// 简介：    
///////////////////////////////////////////////////////////////////////////////

#ifndef RENDER_DX9_D3D9RENDERWINDOW_HPP_
#define RENDER_DX9_D3D9RENDERWINDOW_HPP_

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif

#include <boost/shared_ptr.hpp>

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <d3d9.h>

#include <graphics/EventDelegate.hpp>
#include <graphics/graphics/render/RenderWindow.hpp>

namespace dx9
{
    namespace render
    {
        class D3D9RenderWindow : public ::graphics::graphics::render::RenderWindow
        {
        public:
            D3D9RenderWindow(void);
            virtual ~D3D9RenderWindow(void);

        public:
            virtual void SetTitle(::graphics::string title);
            virtual ::graphics::string GetTitle(void) const;

        public:
            void SetEventDelegate(::graphics::EventDelegate* delegate);
            HWND GetHWND(void) const;
            bool Initialize(void);
            void Show(void);

        private:
            bool RegisterClass_(::graphics::graphics::render::RenderWindow::stProperties& properties);
            bool CreateWindow_(::graphics::graphics::render::RenderWindow::stProperties& properties);

        private:
            static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

        private:
            HMODULE hModule_;
            HWND hWnd_;

            ::graphics::EventDelegate* eventDelegate_;

            ::graphics::string title_;
        };

        typedef boost::shared_ptr<D3D9RenderWindow> D3D9RenderWindowPtr;
    }
}

#endif //RENDER_DX9_D3D9RENDERWINDOW_HPP_
